0.前提 VID;0x04d8, PID;0xE6B3 の COM ポートを 12000000 * 40, 8bit, NonParity, StopBit 1 で開く。 1.共通 1.1 初期化 0x30-> <-0x31 ; NOTIFYモードで初期化。 <-0x33 ; MD6Bモードで初期化。 <-0x34 ; CYBERモードで初期化。 0x31-> <-0x31 ; NOTIFYモードで初期化。 0x32-> <-0x32 ; COMMANDモードで初期化。 ※エミュレータは最初にいずれかを発行し「じょうぽーとU君」を初期化すること。 ※0x3X の前に 3.1 状態変化通知 が入る可能性もある。 2.COMMANDモード 2.1 状態取得 0x3A-> <-0xXX ; XXはPortAの状態 0x3B-> <-0xXX ; XXはPortBの状態 0x3C-> <-0bXXXX0000 ; XXXX は PortCの状態、上位4bits 「1.1 初期化」の3つも受け付ける 2.2 状態設定 0b1XX0XXXX-> ; Xは PortA に設定する値。 応答なし 0b1XX1XXXX-> ; Xは PortB に設定する値。 応答なし 0b0000XXXX-> ; Xは PortC の上位4bitsに設定する値。 応答なし 0b01XXXXYY-> ; Xは CtrlWordへ 0b1XXXX0YY と設定する値。 応答なし 0b0001XXXX ; Xは CtrlWordへ 0b0000XXXX と設定する値。 応答なし 3.NOTIFYモード 3.1 状態変化通知 <-0b1XX0XXXX ; Xは PortA の状態。変化があると通知される。 <-0b1XX1XXXX ; Xは PortB の状態。変化があると通知される。 <-0b0000XXXX ; Xは PortC の上位4bits の状態。変化があると通知される。 ※この3つの通知は初期化コマンドの応答の前に入る可能性もある。 3.2 状態設定 0b1XX0XXXX-> ; Xは PortA に設定する値。 <-0x3F 0b1XX1XXXX-> ; Xは PortB に設定する値。 <-0x3F 0b0000XXXX-> ; Xは PortC の上位4bitsに設定する値。 <-0x3F 0b01XXXXYY-> ; Xは CtrlWordへ 0b1XXXX0YY と設定する値。 <-0x3F 0b0001XXXX ; Xは CtrlWordへ 0b0000XXXX と設定する値。 <-0x3F ※送信後、0x3Fが来る前に状態変化通知が入ることもある。 「1.1 初期化」の3つも受け付ける 4.MD6Bモード 4.1 状態変化通知 <-0x1CB1:RLBF ; 1P側の状態。変化があると通知される。 <-0b0SA1:MXYZ ; 1P側の状態。変化があると通知される。 <-0x1CB0:RLBF ; 2P側の状態。変化があると通知される。 <-0b0SA0:MXYZ ; 2P側の状態。変化があると通知される。 ※この4つの通知は初期化コマンドの応答の前に入る可能性もある。 4.2 状態設定 「1.1 初期化」の3つも受け付ける 5.CYBERモード 5.1 状態変化通知 <-0x1001:0000 ; サイバースティックが抜かれたとき、定期的に通知される。 変化があると以下の12Bytesが通知される。 <-0x1111:ABCD ; データの先頭 <-0x0000:E1,E2,F,G <-0x0000:(St上下)H <-0x0000:(St左右)H <-0x0000:(Sl上下)H <-0x0000:(Sl左右)H <-0x0000:(St上下)L <-0x0000:(St左右)L <-0x0000:(Sl上下)L <-0x0000:(Sl左右)L <-0x0000:A,B,A',B' <-0x0000:1111 5.2 状態設定 「1.1 初期化」の3つも受け付ける (EOF)